package org.dromara.community.controller;

import cn.dev33.satoken.annotation.SaIgnore;
import io.swagger.v3.oas.annotations.Operation;
import org.dromara.comm_lhz.util.QiniuUtil;
import org.dromara.community.entity.AsComplaint;
import org.dromara.community.entity.dto.AsComplaintDTO;
import org.dromara.community.service.AsComplaintService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 投诉相关
 *
 * @author lhz
 * @date 2023/07/30
 */
@RestController
@RequestMapping("/complaint")
public class AsComplaintController {

    @Autowired
    private AsComplaintService asComplaintService;

    @Autowired
    private QiniuUtil qiniuUtil;


    /**
     * 处理修改或添加投诉请求的控制器方法
     *
     * @param file                      投诉相关的文件，不能为空
     * @param complaintclassificationId 投诉分类的ID
     * @param supplementaryExplanation  补充说明，对投诉的详细描述
     * @param userId                    提交投诉的用户ID
     * @return 包含处理结果的响应实体，包括投诉是否成功的信息
     */
    @SaIgnore
    @Operation(summary = "上传图片并新增投诉")
    @PostMapping("/modifyaddComplaint")
    public ResponseEntity<Map<String, Object>> modifyaddComplaint(
        @RequestParam(value = "file") MultipartFile file,
        @RequestParam(value = "complaintclassificationId") Long complaintclassificationId,
        @RequestParam(value = "supplementaryExplanation") String supplementaryExplanation,
        @RequestParam(value = "userId") Long userId) {

        HashMap<String, Object> hashMap = new HashMap<>();

        try {
            // 检查文件是否为空，因为投诉必须附带文件
            if (file.isEmpty()) {
                hashMap.put("message", "文件不能为空");
                return new ResponseEntity<>(hashMap, HttpStatus.BAD_REQUEST);
            }

            // 上传文件到七牛云，并获取上传后的文件URL
            String uploadImage = qiniuUtil.uploadImage(file);

            // 创建投诉对象，并设置相关属性
            AsComplaint asComplaint = new AsComplaint();
            asComplaint.setUrl(uploadImage);
            asComplaint.setComplaintclassificationId(complaintclassificationId);
            asComplaint.setSupplementaryExplanation(supplementaryExplanation);
            asComplaint.setUserId(userId);

            // 保存投诉信息到数据库
            asComplaintService.save(asComplaint);

            // 投诉成功，返回成功消息和上传的文件URL
            hashMap.put("message", "投诉成功");
            hashMap.put("uploadImage", uploadImage);
            return new ResponseEntity<>(hashMap, HttpStatus.OK);

        } catch (Exception e) {
            // 异常情况下，投诉失败，返回失败消息
            hashMap.put("message", "投诉失败");
            throw new RuntimeException(e);
        }
    }


    /**
     * 根据图片ID查询获取投诉信息列表
     * 此方法提供了一个接口，用于从数据库中查询并返回所有投诉信息
     * 它使用了@GetMapping注解，指明这是一个处理GET请求的方法，URL路径为"/getComplaintByImageId"
     * 方法内部调用了asComplaintService.selectAll()方法，以从数据库中查询所有投诉信息
     *
     * @return 返回一个包含所有投诉信息的List<AsComplaintDTO>对象
     */
    @Operation(summary = "查询获取投诉信息")
    @GetMapping("/getComplaintByImageId")
    public List<AsComplaintDTO> getComplaintByImageAll() {
        return asComplaintService.selectAll();
    }
}
